template<class T>
class UniqueStr{
  public:
    UniqueStr(T* p = nullptr)
    :point_s(p)
    {}

    ~UniqueStr(){
      delete point_s;
    }

    T& operator*(){
      return *point_s;
    }

    T* operator->(){
      return point_s;
    }
  private:
    UniqueStr(const UniqueStr&) = delete;
    UniqueStr& operator=(const UniqueStr&) = delete;

    T* point_s;
};
